package br.com.gkarian.mydesk.model.financeiro;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;

import br.com.gkarian.mydesk.enums.TipoConta;
import br.com.gkarian.mydesk.model.Usuario;

@Entity(name="conta_bancaria")
public class ContaBancaria {

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private Integer id;
	
	@NotEmpty(message="contabancaria.agencia.tamanho")
	@Length(min=3, max=8, message="contabancaria.agencia.tamanho")
	@Column(length=8)
	private String agencia;
	
	@NotEmpty(message="contabancaria.conta.tamanho")
	@Length(min=3, max=10, message="contabancaria.conta.tamanho")
	@Column(length=10)
	private String conta;
	
	@Enumerated(EnumType.STRING)
	@Column(length=3)
	private TipoConta tipoConta;
	
	@Column(length=10)
	@NotEmpty(message="contabancaria.saldo.tamanho")
	@Length(min=0, max=13, message="contabancaria.saldo.tamanho")
	private String saldo;
	
	@OneToMany(mappedBy="contaBancaria", cascade={CascadeType.ALL})
	private List<Transacao> listTransacao;
	
	@ManyToOne(fetch=FetchType.EAGER)
	@Fetch(FetchMode.JOIN)
	private Banco banco;
	
	@ManyToOne(fetch=FetchType.LAZY)
	@Fetch(FetchMode.JOIN)
	private Usuario usuario;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getAgencia() {
		return agencia;
	}

	public void setAgencia(String agencia) {
		this.agencia = agencia;
	}

	public String getConta() {
		return conta;
	}

	public void setConta(String conta) {
		this.conta = conta;
	}

	public TipoConta getTipoConta() {
		return tipoConta;
	}

	public void setTipoConta(TipoConta tipoConta) {
		this.tipoConta = tipoConta;
	}

	public String getSaldo() {
		return saldo;
	}

	public void setSaldo(String saldo) {
		this.saldo = saldo;
	}

	public List<Transacao> getListTransacao() {
		return listTransacao;
	}

	public void setListTransacao(List<Transacao> listTransacao) {
		this.listTransacao = listTransacao;
	}

	public Banco getBanco() {
		return banco;
	}

	public void setBanco(Banco banco) {
		this.banco = banco;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	
}
